﻿using RotovapPlatform.Domain.Business.Recipes.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace RotovapPlatform.Domain.Business.Interfaces
{
	/// <summary>
	/// 实验仓储接口
	/// </summary>
	public interface IExperimentRepository
	{
		/// <summary>
		/// 获取所有实验
		/// </summary>
		Task<IEnumerable<Experiment>> GetAllAsync();

		/// <summary>
		/// 根据ID获取实验
		/// </summary>
		Task<Experiment> GetByIdAsync(Guid experimentId);

		/// <summary>
		/// 添加实验
		/// </summary>
		Task AddAsync(Experiment experiment);

		/// <summary>
		/// 更新实验
		/// </summary>
		Task UpdateAsync(Experiment experiment);

		/// <summary>
		/// 删除实验
		/// </summary>
		Task DeleteAsync(Guid experimentId);

		/// <summary>
		/// 根据实验组ID获取实验列表
		/// </summary>
		Task<IEnumerable<Experiment>> GetByGroupIdAsync(Guid groupId);

		/// <summary>
		/// 根据配方ID获取实验列表
		/// </summary>
		Task<IEnumerable<Experiment>> GetByRecipeIdAsync(Guid recipeId);

		/// <summary>
		/// 根据状态获取实验列表
		/// </summary>
		Task<IEnumerable<Experiment>> GetByStatusAsync(ExperimentStatus status);

		/// <summary>
		/// 根据时间范围获取实验列表
		/// </summary>
		Task<IEnumerable<Experiment>> GetByTimeRangeAsync(DateTime startTime, DateTime endTime);
	}
}
